#coding=utf-8
import uuid
from qiniu import Auth, put_file, etag, urlsafe_base64_encode,put_data
import hashlib
from misc.constants import QINIU
from flask import session, jsonify, g
from functools import wraps


def upload_to_qiniu(data):

    access_key =  QINIU.access_key
    secret_key =  QINIU.secret_key
    #构建鉴权对象
    q = Auth(access_key, secret_key)
    #要上传的空间
    bucket_name = 'dianjing'
    #上传到七牛后保存的文件名
    
    key = str(md5_value(data)) + ".png"
    #生成上传 Token，可以指定过期时间等
    token = q.upload_token(bucket_name, key, 3600)
    #要上传文件的本地路径(这里用的不是路径方法，稍微改了下)
    #localfile = file_path
    ret, info = put_data(token, key, data)

    return key

def special_upload_to_qiniu(path):

    access_key =  QINIU.access_key
    secret_key =  QINIU.secret_key
    #构建鉴权对象
    q = Auth(access_key, secret_key)
    #要上传的空间
    bucket_name = 'dianjing'
    #上传到七牛后保存的文件名

    key = str(uuid.uuid4()) + ".png"
    #生成上传 Token，可以指定过期时间等
    token = q.upload_token(bucket_name, key, 3600)
    
    #要上传文件的本地路径
    localfile = path
    ret, info = put_file(token, key, localfile)

    return key


def md5_value(content):
    return hashlib.md5(content).hexdigest() 


def login_required(view_func):
    """自定义装饰器判断用户是否登录
    使用装饰器装饰函数时，会修改被装饰的函数的__name属性和被装饰的函数的说明文档
    为了不让装饰器影响被装饰的函数的默认的数据，使用@wraps装饰器，提前对view_funcJ进行装饰
    """

    @wraps(view_func)
    def wraaper(*args, **kwargs):

        username = session.get('username')
        if not username:
            return jsonify(status=1,msg=u"用户未登录")
        else:
            # 当用户已登录，使用g变量记录用户的user_id，方便被装饰是的视图函数中可以直接使用
            #g.username = username
            # 执行被装饰的视图函数
            return view_func(*args, **kwargs)

    return wraaper
